#include "complie_run.hpp"
#include "../comm/httplib.h"

using namespace ns_compile_and_run;
using namespace httplib;

/*********************************
 * in_json:
 *      1. : 用户输入测试用例
 *      2. code: 提交代码
 *      3. cpu_limit: CPU资源上限(时间要求)
 *      4. mem_limit：内存资源上限(空间要求)
 *
 * out_json:
 *      1. status: 状态码
 *      2. result: 请求结果
 *      3. stdout: 程序执行结果（选填）
 *      4. stderr: 程序执行错误结果（选填）
 ***********************************/
void Usage(std::string proc)
{
    std::cerr << "Usage: " << "\n\t" << proc << " port" << std::endl;
}

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }

    Server svr;
    svr.Post("/compile_and_run", [](const Request &req, Response &resp){
        std::string in_json = req.body;
        std::string out_json;
        if(!in_json.empty())
        {
            CompileAndRun::Start(in_json, &out_json);
            resp.set_content(out_json, "application/json;charset=utf-8");
        } 
    });
    svr.listen("0.0.0.0", atoi(argv[1]));
    return 0;
}

// Json::Value in;
// in["input"] = "";
// in["code"] = R"(#include <iostream>
//     int main(){
//         std::cout << "编译运行测试代码" << std::endl;
//         // while(1);
//         // int * p = new int[1024 *1024 * 30];
//         std::cerr << "测试代码" << std::endl;
//         return 0;
//     }
// )";
// in["cpu_limit"] = 2;
// in["mem_limit"] = 1024 * 30;

// Json::StyledWriter in_writer;
// std::string in_json = in_writer.write(in);
// // std::cout << in_json << std::endl;
// std::string out_json;

// CompileAndRun::Start(in_json, &out_json);
// // std::cout << out_json << std::endl;
